package es.udc.acs.utils;

import es.udc.acs.parser.ParserMensaje;

public class FormateadorControl {
	
	public static void formatearMensaje(String mensaje) {	
		
		String tipo = ParserMensaje.obtenerTipo(mensaje);
		
		if(tipo.equals(CodigosFAP.CM_B_PC_ABRIR_SESION)){
			FormateadorControl.mostrarAperturaSesion(mensaje, true);
		} else if (tipo.equals(CodigosFAP.CM_B_PC_DETENER_TRAFICO)) {
			FormateadorControl.mostrarDetenerTrafico(mensaje, true);
		} else if (tipo.equals(CodigosFAP.CM_B_PC_REANUDAR_TRAFICO)) {
			FormateadorControl.mostrarReanudarTrafico(mensaje, true);
		} else if (tipo.equals(CodigosFAP.CM_B_PC_CIERRE_SESION)) {
			FormateadorControl.mostrarCierreSesion(mensaje, true);
		} else if (tipo.equals(CodigosFAP.CM_C_PC_RECUPERACION)) {
				FormateadorControl.mostrarTraficoRecuperacion(mensaje, true);
		} else if (tipo.equals(CodigosFAP.CM_C_PC_FIN_RECUPERACION)) {
			FormateadorControl.mostrarFinTraficoRecuperacion(mensaje, true);
		} else if(tipo.equals(CodigosFAP.CM_C_RC_ABRIR_SESION)){
			FormateadorControl.mostrarAperturaSesion(mensaje, false);
		} else if (tipo.equals(CodigosFAP.CM_C_RC_DETENER_TRAFICO)) {
			FormateadorControl.mostrarDetenerTrafico(mensaje, false);
		} else if (tipo.equals(CodigosFAP.CM_C_RC_REANUDAR_TRAFICO)) {
			FormateadorControl.mostrarReanudarTrafico(mensaje, false);
		} else if (tipo.equals(CodigosFAP.CM_C_RC_CIERRE_SESION)) {
			FormateadorControl.mostrarCierreSesion(mensaje, false);
		} else if (tipo.equals(CodigosFAP.CM_B_RC_RECUPERACION)) {
			FormateadorControl.mostrarTraficoRecuperacion(mensaje, false);
		} else if (tipo.equals(CodigosFAP.CM_B_RC_FIN_RECUPERACION)) {
			FormateadorControl.mostrarFinTraficoRecuperacion(mensaje, false);
		} else {
			System.out.println("Recibido mensaje no reconocido:"+mensaje);
		}
		
	}

	public static void mostrarAperturaSesion(String respuesta, 
								             boolean solicitud) {
		
		String cuerpo = ParserMensaje.obtenerCuerpo(respuesta); 		
		
		System.out.println("-----------------------------------");
		System.out.println("Apertura de Sesion");
		System.out.println("-----------------------------------");
		
		mostrarCabecera(respuesta,solicitud);
		
		if (solicitud) {
			System.out.println("Numero de canales: "+ParserMensaje.obtenerNumCanalesAS(cuerpo));
			System.out.println("Fecha: "+ParserMensaje.obtenerFechaAS(cuerpo));
			System.out.println("Hora: "+ParserMensaje.obtenerHoraAS(cuerpo));
			System.out.println("Puerto: "+ParserMensaje.obtenerPuertoAS(cuerpo));
		}else {
			System.out.println("Codigo respuesta: "+ParserMensaje.obtenerCodRespuesta(cuerpo));
			System.out.println("Codigo Error: "+CodigosFAP.obtenerNombreError(
					ParserMensaje.obtenerCodError(cuerpo)));
		}
	}
	
	
	public static void mostrarCierreSesion(String respuesta, 
            							   boolean solicitud) {

		String cuerpo = ParserMensaje.obtenerCuerpo(respuesta); 		
		
		System.out.println("-----------------------------------");
		System.out.println("Cierre de Sesion");
		System.out.println("-----------------------------------");
		
		mostrarCabecera(respuesta,solicitud);
		
		if (solicitud) {
			System.out.println("Total reintegros: "+ParserMensaje.obtenerReintegrosCS(cuerpo,0));
			System.out.println("Total abonos: "+ParserMensaje.obtenerAbonosCS(cuerpo,0));
			System.out.println("Total traspasos: "+ParserMensaje.obtenerTraspasosCS(cuerpo,0));
		}else {
			System.out.println("Codigo respuesta: "+ParserMensaje.obtenerCodRespuesta(cuerpo));
			System.out.println("Codigo Error: "+CodigosFAP.obtenerNombreError(
					ParserMensaje.obtenerCodError(cuerpo)));
			System.out.println("Total reintegros: "+ParserMensaje.obtenerReintegrosCS(cuerpo,4));
			System.out.println("Total abonos: "+ParserMensaje.obtenerAbonosCS(cuerpo,4));
			System.out.println("Total traspasos: "+ParserMensaje.obtenerTraspasosCS(cuerpo,4));
		}
	}
	
	
	public static void mostrarTraficoRecuperacion(String respuesta, 
            								      boolean solicitud) {

		String cuerpo = ParserMensaje.obtenerCuerpo(respuesta); 		
		
		System.out.println("-----------------------------------");
		System.out.println("Trafico en recuperacion");
		System.out.println("-----------------------------------");
		
		mostrarCabecera(respuesta,solicitud);
		
		if (!solicitud) {
			System.out.println("Codigo respuesta: "+ParserMensaje.obtenerCodRespuesta(cuerpo));
			System.out.println("Codigo Error: "+CodigosFAP.obtenerNombreError(
					ParserMensaje.obtenerCodError(cuerpo)));
		}
	}
	
	
	public static void mostrarFinTraficoRecuperacion(String respuesta, 
		      									     boolean solicitud) {

		String cuerpo = ParserMensaje.obtenerCuerpo(respuesta); 		
		
		System.out.println("-----------------------------------");
		System.out.println("Fin de Trafico en recuperacion");
		System.out.println("-----------------------------------");
		
		mostrarCabecera(respuesta,solicitud);
		
		if (!solicitud) {
			System.out.println("Codigo respuesta: "+ParserMensaje.obtenerCodRespuesta(cuerpo));
			System.out.println("Codigo Error: "+CodigosFAP.obtenerNombreError(
					ParserMensaje.obtenerCodError(cuerpo)));
		}
	}
	
	
	public static void mostrarDetenerTrafico(String respuesta, 
		                                     boolean solicitud) {

		String cuerpo = ParserMensaje.obtenerCuerpo(respuesta); 		
		
		System.out.println("-----------------------------------");
		System.out.println("Detener Trafico");
		System.out.println("-----------------------------------");
		
		mostrarCabecera(respuesta,solicitud);
		
		if (!solicitud) {
			System.out.println("Codigo respuesta: "+ParserMensaje.obtenerCodRespuesta(cuerpo));
			System.out.println("Codigo Error: "+CodigosFAP.obtenerNombreError(
					ParserMensaje.obtenerCodError(cuerpo)));
		}
	}
	
	
	public static void mostrarReanudarTrafico(String respuesta, 
                                              boolean solicitud) {

		String cuerpo = ParserMensaje.obtenerCuerpo(respuesta); 		
		
		System.out.println("-----------------------------------");
		System.out.println("Reanudar Trafico");
		System.out.println("-----------------------------------");
		
		mostrarCabecera(respuesta,solicitud);
		
		if (!solicitud) {
			System.out.println("Codigo respuesta: "+ParserMensaje.obtenerCodRespuesta(cuerpo));
			System.out.println("Codigo Error: "+CodigosFAP.obtenerNombreError(
					ParserMensaje.obtenerCodError(cuerpo)));
		}
	}
	
	
	private static void mostrarCabecera(String respuesta,
							            boolean solicitud) {

		String origen  = ParserMensaje.obtenerOrigen(respuesta);
		String destino = ParserMensaje.obtenerDestino(respuesta);
		String tipo    = ParserMensaje.obtenerTipo(
				CodigosFAP.obtenerNombreCodigo(respuesta));		
		
		String tipoM = "Solicitud";
		if (!solicitud) tipoM = "Respuesta";
		
		System.out.println(tipoM+" con origen "+origen+" a destino "+destino+".");
		System.out.println("Tipo de mensaje: "+CodigosFAP.obtenerNombreCodigo(tipo));		
	}
}
